package bufferedstream;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;

/**
 * BufferedInputStream类:
 *   构造方法:
 *      public BufferedInputStream(InputStream in):
 *         基于基本的读取流创建一个缓存流,利用该流完成读操作,最终提高读效率
 *   成员方法:
 *     public int read() throws IOException
 *     public int read(byte[] b) throws IOException
 *   BufferedInputStream类底层原理:
 *    底层会开辟一个默认长度为8192的字节数组(byte[] buf =new byte[8192]),将来读取到的数据都会暂时存储到这个8192的字节数组中
 */
public class BufferedStreamDemo02 {
    public static void main(String[] args)throws Exception {
        //method01();
        BufferedInputStream bis = new BufferedInputStream(
                new FileInputStream("day22-IO-01/9.txt"));

        byte[] bytes = new byte[2];

        int length = bis.read(bytes);//了解:文件读取尽可能多的字节(最多不超过8192)存储到BufferedInputStream底层的8192字节数组中去
        // byte[] buf =new byte[8192]
        // 将8192字节数组中的字节尽可能多拷贝到指定的字节数组,例如:  byte[] bytes = new byte[2],拷贝2个
        //返回拷贝的字节数

        bis.close();

        System.out.println(new String(bytes,0,length));//cd

    }

    private static void method01() throws IOException {
        //1.通过FileInputStream(基本读取流)构建一个缓存流
        BufferedInputStream bis = new BufferedInputStream(
                new FileInputStream("day22-IO-01/9.txt"));

        //2.利用读方法读取文件中的字节
        int b = bis.read();//从文件中尽可能多的读取字节(不超过8192)存储到BufferedInputStream底层的长度为8192的字节数组中去
        //返回长度为8192的字节数组中的一个字节
        System.out.println(b);

        //3.关流释放资源
        bis.close();
    }
}
